﻿<p><em>IfcVirtualGridIntersection</em> defines the derived location of the intersection between two grid axes. Offset values may be given to set an offset distance to the grid axis for the calculation of the virtual grid intersection.</p>

<p>The two intersecting axes (<em>IntersectingAxes</em>) define the intersection point, which exact location (in terms of the Cartesian point representing the intersection) has to be calculated from the geometric representation of the two participating curves.</p>

<blockquote class="note">
NOTE&nbsp; The <em>IfcGrid</em> local placement, that can be provided relative to the local placement of another spatial structure element, has to be taken into account for calculating the absolute placement of the <em>IfcVirtualGridIntersection</em>. Where rules and informal rules ensure, that the <em>IntersectingAxes</em> belong to the same <em>IfcGrid</em>
</blockquote>

<p>Offset values may be given (<em>OffsetDistances</em>). If given, the position within the list of <em>OffsetDistances</em>
corresponds with the position within the list of <em>IntersectingAxes</em>. Therefore:</p>
<ul>
<li><em>OffsetDistances[1]</em> sets the offset to <em>IntersectingAxes[1]</em>,</li>
<li><em>OffsetDistances[2]</em> sets the offset to <em>IntersectingAxes[2]</em>, and</li>
<li><em>OffsetDistances[3]</em> sets the offset to the virtual intersection in direction of the orientation of the cross product
of <em>IntersectingAxes[1]</em> and the orthogonal complement of the <em>IntersectingAxes[1]</em> (which is the positive or negative
direction of the z axis of the design grid position).</li>
</ul>

<p>The following figures explain the usage of the <em>OffsetDistances</em> and <em>IntersectingAxes</em> attributes.</p>

<table cellpadding="2" cellspacing="2">
<tr valign="top"><td align="left" valign="top"><img src=
"../../../figures/ifcvirtualgridintersection-layout1.gif" alt="2D offsets" border="0" height="300" width="400"></td>
<td style="vertical-align:bottom">
<p class="small">Figure 4 illustrates two offset distances given where the virtual intersection is defined in the xy plane of the grid axis placement.</p>
</td>
</tr>
<tr><td><p class="figure">Figure 4 &mdash; Virtual grid intersection with two offsets</p></td>
<td>&nbsp;</td></tr>
</table>

<table cellpadding="2" cellspacing="2"><tr valign="top"><td align="left" valign="top"><img src=
"../../../figures/ifcvirtualgridintersection-layout2.gif" alt="3D offsets"
border="0" height="300" width="400"></td>
<td style="vertical-align:bottom">
<p class="small">Figure 5 illustrates three offset distances given where the virtual intersection is defined by an offset (in direction of the
z-axis of the design grid placement) to the virtual intersection in the xy plane of the grid axis placement.</p>
</td>
</tr>
<tr><td><p class="figure">Figure 5 &mdash; Virtual grid intersection with three offsets</p></td>
<td>&nbsp;</td></tr>
</table>

<p>The distance of the offset curve (<em>OffsetDistances[n]</em>) is measured from the basis curve. The distance may be positive,
negative or zero. A positive value of distance defines an offset in the direction which is normal to the curve in the sense of an
anti-clockwise rotation through 90 degrees from the tangent vector T at the given point. (This is in the direction of
orthogonal complement(T).) This can be reverted by the <em>SameSense</em> attribute at <em>IfcGridAxis</em> which may switch
the sense of the <em>AxisCurve</em>.</p>

<table cellpadding="2" cellspacing="2">
<tr><td align="left" valign="top" width="400"><img src="../../../figures/ifcvirtualgridintersection-offset1.gif" alt="offset direction" border="0" height="211" width="306"></td>
<td style="vertical-align:bottom">
<p class="small">Figure 6 illustrates an example of a negative offset where the figure shows the side of the offset.</p>
<ul>
<li class="small"><em>IntersectingAxes[1].AxisCurve</em> is an
<em>IfcTrimmedCurve</em> with an <em>IfcCircle</em> as
<em>BasisCurve</em> and <em>SenseAgreement</em> = TRUE.</li>
<li class="small"><em>IntersectingAxes[1].SameSense</em> = TRUE.</li>
<li class="small"><em>OffsetDistances[1]</em> is a negative length measure</li>
</ul>
</td>
</tr>
<tr><td><p class="figure">Figure 6 &mdash; Virtual grid intersection negative offset</p></td>
<td>&nbsp;</td></tr>
</table>

<blockquote class="history">
HISTORY&nbsp; New entity in IFC1.5.
</blockquote>
<blockquote class="change-ifc2x">
IFC2x CHANGE&nbsp; Renamed from IfcConstraintRelIntersection.
</blockquote>

<p class="spec-head">Informal Propositions:</p>
<ol>
<li>Both, <em>IntersectingAxes[1]</em> and
<em>IntersectingAxes[2]</em> shall be two <em>IfcGridAxis</em>
defined by the same <em>IfcGrid</em>.</li>
<li><em>IntersectingAxes[1]</em> and <em>IntersectingAxes[2]</em>
shall not be part of the same row of grid axes, i.e. both shall
not be within the same set of <em>IfcGrid.UAxes</em> or
<em>IfcGrid.VAxes</em> of the corresponding <em>IfcGrid</em>.</li>
</ol>